// #include <stdio.h>
// #include <stdlib.h>
// #include <string.h>
// #include <assert.h>
// #include "windows.h"
// // 节点结构
// typedef struct LinkNode {
//     int data; // 存储数据
//     struct LinkNode* next; // 指向下一个节点
// } LinkNode;
//
// // 链表结构
// typedef struct LinkList {
//     LinkNode* head; // 指向头节点
// } LinkList;
//
// // 初始化循环单链表
// LinkList* LinkInit() {
//     LinkList* list = (LinkList*)malloc(sizeof(LinkList));
//     if (list == NULL) {
//         perror("malloc failed");
//         exit(EXIT_FAILURE);
//     }
//     list->head = (LinkNode*)malloc(sizeof(LinkNode));
//     if (list->head == NULL) {
//         perror("malloc failed");
//         exit(EXIT_FAILURE);
//     }
//     list->head->next = list->head; // 初始化为循环链表
//     return list;
// }
//
// // 插入节点到循环单链表尾部
// void LinkInsert(LinkList* list, int data) {
//     assert(list);
//     LinkNode* newNode = (LinkNode*)malloc(sizeof(LinkNode));
//     if (newNode == NULL) {
//         perror("malloc failed");
//         exit(EXIT_FAILURE);
//     }
//     newNode->data = data;
//
//     LinkNode* tail = list->head->next; // 找到尾节点
//     while (tail->next != list->head) {
//         tail = tail->next;
//     }
//     tail->next = newNode; // 尾节点的next指向新节点
//     newNode->next = list->head; // 新节点的next指向头节点
// }
//
// // 删除循环单链表中的节点
// void LinkDelete(LinkList* list, int data) {
//     assert(list);
//     LinkNode* current = list->head;
//     LinkNode* prev = list->head;
//
//     while (current->next != list->head) {
//         if (current->next->data == data) {
//             LinkNode* temp = current->next;
//             current->next = temp->next; // 跳过要删除的节点
//             if (temp == list->head) { // 如果删除的是头节点
//                 list->head = current->next;
//             }
//             free(temp);
//             return;
//         }
//         current = current->next;
//     }
// }
//
// // 查找循环单链表中的节点
// LinkNode* LinkFind(LinkList* list, int data) {
//     assert(list);
//     LinkNode* current = list->head->next;
//     while (current != list->head) {
//         if (current->data == data) {
//             return current;
//         }
//         current = current->next;
//     }
//     return NULL; // 未找到
// }
//
// // 打印循环单链表
// void LinkPrint(LinkList* list) {
//     assert(list);
//     LinkNode* current = list->head->next;
//     while (current != list->head) {
//         printf("%d ", current->data);
//         current = current->next;
//     }
//     printf("\n");
// }
//
// // 销毁循环单链表
// void LinkDestroy(LinkList* list) {
//     assert(list);
//     LinkNode* current = list->head;
//     LinkNode* next;
//     do {
//         next = current->next;
//         free(current);
//         current = next;
//     } while (current != list->head);
//     free(list);
// }
//
// int main() {
//     SetConsoleOutputCP(CP_UTF8);
//     LinkList* list = LinkInit();
//
//     // 插入数据到循环单链表
//     LinkInsert(list, 1);
//     LinkInsert(list, 2);
//     LinkInsert(list, 3);
//     LinkInsert(list, 4);
//
//     printf("循环单链表内容: ");
//     LinkPrint(list);
//
//     // 查找节点
//     LinkNode* found = LinkFind(list, 3);
//     if (found) {
//         printf("找到节点，数据为: %d\n", found->data);
//     } else {
//         printf("未找到节点\n");
//     }
//
//     // 删除节点
//     LinkDelete(list, 2);
//     printf("删除节点后，循环单链表内容: ");
//     LinkPrint(list);
//
//     // 销毁循环单链表
//     LinkDestroy(list);
//
//     return 0;
// }